#ifndef FACE_H
#define FACE_H

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
#include <string>
#include <QObject>

Q_DECLARE_METATYPE(cv::Mat);
Q_DECLARE_METATYPE(cv::Rect);

using namespace cv;

struct Employee
{
    std::string depart_id; //<部门
    std::string id; //< 工号
    std::string info; //< 员工信息
    double score; //< 相似度得分
};

Q_DECLARE_METATYPE(Employee);

typedef int (*face_callback_t)(Employee& e, void* data);
class MyFace : public QObject
{
    Q_OBJECT
public:
    MyFace(std::string model);

signals:
    //void detected(cv::Mat image);
    void detected(cv::Rect face);
    void recognized(Employee e);

public slots:
    /**
         * 检测图像中是否存在人脸
         * @param image 待检测图像
         */
    void detect(cv::Mat image);
    /**
         * 识别人脸
         * 创建线程，将人脸图像进行压缩和BASE64编码后发送给百度云
         * 解析百度云API返回的结果：
         * @param face 待识别的人脸图像
         */
    void recognize(cv::Mat face);
private:
   cv::CascadeClassifier classifier;
   cv::Mat image;

};

#endif // FACE_H
